自动化无痛打包运行 Python 项目
之前在做狸语字幕助手这个项目时,最开始用的库中带有 PyTorch 依赖,而这个依赖又是出了名的大,导致要打包部署项目时特别费劲,我用传统的 PyInstaller、Nuitka 这两个打包方案试了一天都没成功。
于是我想起了之前看到的 PyStand 这个项目。这个项目通过提供一个可执行文件,调用打包部署后的目录下的 Python Embedded 解释器来运行项目。
这个项目相比于传统的打包方式的区别如下:
优点:
- 在面对 pytorch 这样的巨型依赖时不会处理不动
- 引入所需要进行的修改更少,通用性更强,只需要额外提供一个作为入口的 Python 模块文件
同时缺点也很明显:
- 需要自行手动构建
- 打包后只支持在 Windows 上运行
我在狸语这个项目中使用了这个项目并配置了 GitHub Actions 来实现自动化打包,为了方便在其它项目中复用,我将这个流程封装成了一个单独的 GitHub Actions,你可以在这里找到这个 Action。
具体的用法就像这样:
jobs:
build:
runs-on: windows-latest
- name: Checkout
uses: actions/checkout@v4
- name: Build Python Application Standalone Package
id: pystand-build
uses: BHznJNs/pystand-build@release-6
with:
application-name: "YourApplicationName" # 项目名称
python-version: "3.11.9" # 项目使用的 Python 版本
requirements-path: "backend/requirements.txt" # 你的 requirements.txt 文件的路径
pystand-entry-file: "PyStand.py" # 对于 PyStand 的入口文件
included-files: |
backend/ # Python 源代码目录
# 其它资源文件目录
- name: Create Zip Archive
shell: bash
run: |
build_path="${{ steps.pystand-build.outputs.build-directory }}"
(cd "$build_path" && 7z a -tzip "$RUNNER_TEMP/YourApplicationName.zip" .)
# upload package with `${{ runner.temp }}/YourApplicationName.zip`
对于项目本身几乎不需要进行修改,只需新建一个面向 PyStand 的 Python 入口模块,再引入这个 action 即可。